package com.fanrenqiji.entity;

import lombok.Getter;
import lombok.Setter;
import org.apache.shiro.SecurityUtils;

import javax.annotation.PreDestroy;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

/**
 * @author lijian E-mail:ljz0721cx@163.com
 * @version 创建时间：2015年1月16日 上午10:42:20
 * @description 对应数据表中的Entity基本抽象类
 */
@Getter
@Setter
@MappedSuperclass
public class DataEntity extends BaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;
    /**
     * 备注
     */
    @Column(name = "remarks", columnDefinition = ("varchar(255) default null comment '备注'"))
    protected String remarks;
    /**
     * 创建对象
     */
    @Column(name = "create_by", columnDefinition = ("varchar(200) default null comment '创建人'"))
    protected String createBy;
    /**
     * 创建日期
     */
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "create_date", columnDefinition = ("datetime default null comment '创建日期'"))
    protected Date createDate;
    /**
     * 更新者
     */
    @Column(name = "update_by", columnDefinition = ("varchar(200) default null comment '修改人'"))
    protected String updateBy;
    /**
     * 更新日期
     */
    @Column(name = "update_date", columnDefinition = ("datetime default null comment '更新日期'"))
    protected Date updateDate;
    /**
     * 状态标记：删除标记（0：正常；1：删除；2：审核）
     */
    @Column(name = "del_flag", columnDefinition = ("tinyint(1) default 0 comment '删除标志 0：正常；1：删除；2：审核'"))
    protected int delFlag;

    public DataEntity() {
        super();
        //初始化时候默认是正常的
        this.delFlag = DEL_FLAG_NORMAL;
    }

    /**
     * 持久化之前对操作对象初始化
     */
    @PrePersist
    public void prePersist() {

        try {
            if (SecurityUtils.getSubject() != null && SecurityUtils.getSubject().getPrincipal() != null) {
                Object obj = SecurityUtils.getSubject().getPrincipal();
                this.createBy = "" + obj;
            }
        } catch (Exception e) {
            this.createBy = "system";
        }

        this.updateDate = new Date();
        if (null == this.createDate)
            this.createDate = this.updateDate;
    }

    /**
     * 在更新之前的初始化
     */
    @PreUpdate
    public void preUpdate() {
        try {
            if (SecurityUtils.getSubject() != null && SecurityUtils.getSubject().getPrincipal() != null) {
                Object obj = SecurityUtils.getSubject().getPrincipal();
                this.updateBy = "" + obj;
            }
        } catch (Exception e) {
            this.updateBy = "system";
        }
        this.updateDate = new Date();
    }

    /**
     * 删除之前的初始化
     */
    @PreDestroy
    public void preDestroy() {

    }

}
